Scale an image which is stored as a byte[] in Java

Posted by Sergio del Amo on Stack Overflow See other posts from Stack Overflow or by Sergio del Amo
Published on 2009-08-04T16:01:47Z Indexed on 2010/05/08 10:18 UTC
Read the original article Hit count: 272

Filed under:
|
|

I upload a file with a struts form. I have the image as a byte[] and I would like to scale it.

FormFile file = (FormFile) dynaform.get("file");
byte[] fileData = file.getFileData(); 
fileData = scale(fileData,200,200);

public byte[] scale(byte[] fileData, int width, int height) {
// TODO 
}

Anyone knows an easy function to do this?

public byte[] scale(byte[] fileData, int width, int height) {
    	ByteArrayInputStream in = new ByteArrayInputStream(fileData);
    	try {
    		BufferedImage img = ImageIO.read(in);
    		if(height == 0) {
    			height = (width * img.getHeight())/ img.getWidth(); 
    		}
    		if(width == 0) {
    			width = (height * img.getWidth())/ img.getHeight();
    		}
    		Image scaledImage = img.getScaledInstance(width, height, Image.SCALE_SMOOTH);
    		BufferedImage imageBuff = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
    		imageBuff.getGraphics().drawImage(scaledImage, 0, 0, new Color(0,0,0), null);

    		ByteArrayOutputStream buffer = new ByteArrayOutputStream();

    		ImageIO.write(imageBuff, "jpg", buffer);

    		return buffer.toByteArray();
    	} catch (IOException e) {
    		throw new ApplicationException("IOException in scale");
    	}
    }

If you run out of Java Heap Space in tomcat as I did, increase the heap space which is used by tomcat. In case you use the tomcat plugin for Eclipse, next should apply:

In Eclipse, choose Window > Preferences > Tomcat > JVM Settings

Add the following to the JVM Parameters section

-Xms256m -Xmx512m

© Stack Overflow or respective owner

Related posts about java

Related posts about image